/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufjf.pos.model.dao;

import br.ufjf.pos.model.*;
import br.ufjf.pos.util.GenericDao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;

/**
 *
 * @author cleber
 */
public class AtendimentoDAO  extends GenericDao<Atendimento, Integer>{

    @Override
    public void inserir(Atendimento obj) throws SQLException, ClassNotFoundException {
        String sql = "INSERT INTO TBatendimento (DFdata_hora, "
                                              + "DFid_atendente, "
                                              + "DFid_dentista, "
                                              + "DFid_paciente) VALUES (?,?,?,?)";
        
        ArrayList<String> lista = new ArrayList<String>();
        lista.add(obj.getDataHora() +"");
        lista.add(obj.getAtentente().getIdAtendente() +"");
        lista.add(obj.getDentista().getIdDentista() +"");
        lista.add(obj.getPaciente().getIdpaciente() +"");
        
        executaDML(sql, lista);
    }

    @Override
    public void alterar(Atendimento obj) throws SQLException, ClassNotFoundException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void apagar(Atendimento obj) throws SQLException, ClassNotFoundException {
        ArrayList<String> lista = new ArrayList<String>();
        String sql = "DELETE FROM TBatendimento WHERE DFid_atendimento = ? ";        

        lista.add(obj.getIdAtendimento() +"");
        executaDML(sql, lista);
    }

    @Override
    public Atendimento pesquisaChave(Integer obj) throws SQLException, ClassNotFoundException {
        String sql = "SELECT DFid_atendimento, DFid_paciente AS DFpaciente, DFdata_hora FROM TBatendimento WHERE DFid_atendimento = ? ";
        ArrayList<String> lista = new ArrayList<String>();
        lista.add(obj.toString());

        ResultSet rs = executasql(sql, lista);
        if(rs.next()){         
            Atendente atendente = new Atendente();
            Dentista dentista = new Dentista();
            Paciente padiente = new PacienteDAO().pesquisaChave(rs.getInt("DFpaciente"));            
            Atendimento p = new Atendimento(rs.getInt("DFid_atendimento"), rs.getDate("DFdata_hora"), atendente, dentista , padiente);
            return p;
        } else {
            return null;
        }   
    }

    public boolean isDentistaOcupadoDataHora(Integer obj, String data) throws SQLException, ClassNotFoundException {
        String sql = "SELECT * FROM TBatendimento WHERE DFid_dentista = ? AND DFdata_hora = ? ";
        ArrayList<String> lista = new ArrayList<String>();
        lista.add(obj.toString());
        lista.add(data);

        ResultSet rs = executasql(sql, lista);
        if(rs.next()){                                
            return true;
        } else {
            return false;
        }   
    }
    
    @Override
    public ArrayList<Atendimento> buscarTodos() throws SQLException, ClassNotFoundException {
        /*
        String sql = "SELECT "
                            + " TBatendimento.DFid_atendimento, "
                            + " TBatendimento.DFdata_hora, "
                            + " TBatendente.DFnome AS DFatendente, "
                            + " TBdentista.DFnome AS DFdentista, "
                            + " TBpaciente.DFnome AS DFpaciente "
                    + "  FROM TBatendimento "
               + " INNER JOIN tbfuncionario AS TBatendente "
                       + " ON TBatendente.DFid_funcionario = TBatendimento.DFid_atendente  "
               + " INNER JOIN tbfuncionario AS TBdentista "
                       + " ON TBdentista.DFid_funcionario = TBatendimento.DFid_dentista  "
               + " INNER JOIN TBpaciente "
                       + " ON TBpaciente.DFid_paciente =  TBatendimento.DFid_paciente";
        */
        String sql = "SELECT "
                            + " TBatendimento.DFid_atendimento, "
                            + " TBatendimento.DFdata_hora, "
                            + " TBatendimento.DFid_atendente AS DFatendente, "
                            + " TBatendimento.DFid_dentista AS DFdentista, "
                            + " TBatendimento.DFid_paciente AS DFpaciente "
                    + "  FROM TBatendimento ORDER BY TBatendimento.DFdata_hora ";
        
        ArrayList<String> lista = new ArrayList<String>();        
        
        ArrayList<Atendimento> listaAtendimento = new ArrayList<Atendimento>();
        
        ResultSet rs = executasql(sql, lista);
        while(rs.next()){  
            
            Atendente atendente = new Atendente();
            Dentista dentista = new DentistaDAO().pesquisaChave(rs.getInt("DFdentista"));
            Paciente padiente = new PacienteDAO().pesquisaChave(rs.getInt("DFpaciente"));            
//            Atendimento p = new Atendimento(rs.getString("DFdata_hora"), atendente, dentista , padiente);
            Atendimento p = new Atendimento(rs.getInt("DFid_atendimento"), rs.getTimestamp("DFdata_hora"), atendente, dentista , padiente);
            
            
            //Atendimento p = new Atendimento(rs.getString("DFdata_hora"), rs.getString("DFatendente"), rs.getString("DFdentista") , rs.getString("DFpaciente"));
            listaAtendimento.add(p);
        } 
     
        return listaAtendimento;
    }

    public ArrayList<Atendimento> buscarTodosdoDentista(int idDentista) throws SQLException, ClassNotFoundException {
        String sql = "SELECT "
                            + " TBatendimento.DFid_atendimento, "
                            + " TBatendimento.DFdata_hora, "
                            + " TBatendimento.DFid_atendente AS DFatendente, "
                            + " TBatendimento.DFid_dentista AS DFdentista, "
                            + " TBatendimento.DFid_paciente AS DFpaciente "
                    + "  FROM TBatendimento "
                    + " WHERE TBatendimento.DFid_dentista = ? "
                 + " ORDER BY TBatendimento.DFdata_hora ";
        
        ArrayList<String> lista = new ArrayList<String>();        
        
        lista.add(idDentista +"");
        
        ArrayList<Atendimento> listaAtendimento = new ArrayList<Atendimento>();
        
        ResultSet rs = executasql(sql, lista);
        while(rs.next()){  
            
            Atendente atendente = new Atendente();
            Dentista dentista = new DentistaDAO().pesquisaChave(rs.getInt("DFdentista"));
            Paciente padiente = new PacienteDAO().pesquisaChave(rs.getInt("DFpaciente"));            
            Atendimento p = new Atendimento(rs.getInt("DFid_atendimento"), rs.getTimestamp("DFdata_hora"), atendente, dentista , padiente);

            listaAtendimento.add(p);
        } 
     
        return listaAtendimento;
    }
    
    public ArrayList<ProcedimentoAtendimento> pesquisaProcedimentosAtendimento(Integer obj) throws SQLException, ClassNotFoundException {
        String sql = " SELECT TBprocedimento_atendimento.DFid_procedimento_atendimento, tbprocedimento.DFid_procedimento, tbprocedimento.DFdescricao, TBprocedimento_atendimento.DFvalor_cobrado AS DFvalor "
                     + " FROM TBprocedimento_atendimento "
               + " INNER JOIN tbprocedimento "
                       + " ON tbprocedimento.DFid_procedimento = TBprocedimento_atendimento.DFid_procedimento "
                    + " WHERE TBprocedimento_atendimento.DFid_atendimento = ?  ";
        ArrayList<String> lista = new ArrayList<String>();
        lista.add(obj.toString());

        ArrayList<ProcedimentoAtendimento> listaProcedimentoAtendimento = new ArrayList<ProcedimentoAtendimento>();
        
        ResultSet rs = executasql(sql, lista);
        while(rs.next()){  
            Procedimento procedimento = new Procedimento(rs.getInt("DFid_procedimento"), rs.getString("DFdescricao"), rs.getFloat("DFvalor"));
            ProcedimentoAtendimento p = new ProcedimentoAtendimento(rs.getInt("DFid_procedimento_atendimento"), procedimento, rs.getFloat("DFvalor"));
            listaProcedimentoAtendimento.add(p);            
        }   
        return listaProcedimentoAtendimento;
    }
    /*
    public ArrayList<Procedimento> pesquisaListaProcedimentos(Integer obj) throws SQLException, ClassNotFoundException {
        String sql = " SELECT TBprocedimento_atendimento.DFid_procedimento_atendimento, tbprocedimento.DFid_procedimento, tbprocedimento.DFdescricao, TBprocedimento_atendimento.DFvalor_cobrado AS DFvalor "
                     + " FROM TBprocedimento_atendimento "
               + " INNER JOIN tbprocedimento "
                       + " ON tbprocedimento.DFid_procedimento = TBprocedimento_atendimento.DFid_procedimento "
                    + " WHERE TBprocedimento_atendimento.DFid_atendimento = ?  ";
        ArrayList<String> lista = new ArrayList<String>();
        lista.add(obj.toString());

        ArrayList<Procedimento> listaProcedimento = new ArrayList<Procedimento>();
        
        ResultSet rs = executasql(sql, lista);
        while(rs.next()){  
            Procedimento p = new Procedimento(rs.getInt("DFid_procedimento"), rs.getString("DFdescricao"), rs.getFloat("DFvalor"));
            listaProcedimento.add(p);            
        }   
        return listaProcedimento;
    }
    */

    
    public void inserirProcedimentoAtendimento(int idAtendimento, int idProcedimento, float valorCobrado) throws SQLException, ClassNotFoundException {
        String sql = " INSERT TBprocedimento_atendimento (DFid_atendimento, DFid_procedimento, DFvalor_cobrado) VALUES (?,?,?) ";
        
        ArrayList<String> lista = new ArrayList<String>();
                
        lista.add(idAtendimento +"");
        lista.add(idProcedimento +"");
        lista.add(valorCobrado +"");
        
        //lista.add(String.valueOf(obj.getValor()));
       
        executaDML(sql, lista);
    }    
    
    public void apagarProcedimentoAtendimento(int idProcedimentoAtendimento) throws SQLException, ClassNotFoundException {
        ArrayList<String> lista = new ArrayList<String>();
        String sql = "DELETE FROM TBprocedimento_atendimento WHERE DFid_procedimento_atendimento = ? ";        

        lista.add(idProcedimentoAtendimento +"");
        executaDML(sql, lista);
    }

    public void apagarProcedimentosdeAtendimento(int idAtendimento) throws SQLException, ClassNotFoundException {
        ArrayList<String> lista = new ArrayList<String>();
        String sql = "DELETE FROM TBprocedimento_atendimento WHERE DFid_atendimento = ? ";        

        lista.add(idAtendimento +"");
        executaDML(sql, lista);
    }
    
}
